home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------------
-
- spin.c
-
- This reusable module handles animated cursors.
-
- Copyright © 1994, Northwestern University.
-
- ----------------------------------------------------------------------------*/
-
- #include "def.h"
- #include "spin.h"
- #include "resutil.h"
-
-
-
- static Handle gAcur = nil; /* handle to animated cursor resource */
-
-
-
- /*----------------------------------------------------------------------------
- InitCursorCtl
-
- Initialize an animated cursor.
-
- Entry: acur = handle to 'acur' resource, or nil to use 'acur' id=0.
- ----------------------------------------------------------------------------*/
-
- pascal void InitCursorCtl (Handle acur)
- {
- short numFrames, i, id;
- CursHandle cursorHandle;
- OSErr err = noErr;
-
- if (acur == nil) {
- err = MyGetResource('acur', 0, &gAcur);
- if (err != noErr) return;
- } else {
- gAcur = acur;
- }
- numFrames = *(short*)(*gAcur);
- for (i = 0; i < numFrames; i++) {
- id = *(short*)(*gAcur + 4*i + 4);
- cursorHandle = GetCursor(id);
- *(CursHandle*)(*gAcur + 4*i + 4) = cursorHandle;
- }
- *(short*)(*gAcur + 2) = 0;
- }
-
-
-
- /*----------------------------------------------------------------------------
- SpinCursor
-
- Spin an animated cursor.
-
- Entry: num = spin control parameter.
- ----------------------------------------------------------------------------*/
-
- pascal void SpinCursor (short num)
- {
- short numFrames, curFrame, curCounter;
- CursHandle cursorHandle;
-
- if (gAcur == nil) {
- InitCursorCtl(nil);
- if (gAcur == nil) return;
- }
- numFrames = *(short*)(*gAcur);
- curCounter = *(short*)(*gAcur + 2);
- curCounter = (curCounter + num) % (numFrames * 32);
- *(short*)(*gAcur + 2) = curCounter;
- curFrame = curCounter / 32;
- cursorHandle = *(CursHandle*)(*gAcur + 4 + 4*curFrame);
- SetCursor(*cursorHandle);
- }
-